<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>手写 bind 方法</title>
</head>

<body>
  <script>
    /**
     * 手写 bind 方法
     * 1. 定义 myBind 方法
     * 2. 返回绑定 this 的新函数
     * 3. 合并绑定和新传入的参数
     * */
    // 1. 定义 myBind 方法
    Function.prototype.myBind = function (thisArg, ...args) {
      // 2. 返回绑定 this 的新函数
      return (...reArgs) => {
        // this: func
        // 3. 合并绑定和新传入的参数
        return this.call(thisArg, ...args, ...reArgs)
      }
    }


    const person = {
      name: 'Ali'
    }
    function func(numA, numB, numC, numD) {
      console.log(this)
      console.log(numA, numB, numC, numD)
      return numA + numB + numC + numD
    }

    const bindFunc = func.myBind(person, 1, 2)

    const res = bindFunc(3, 4)
    console.log('返回值为', res)
  </script>
</body>

</html>